#ifndef TDA_LISTAORDENADA
#define TDA_LISTAORDENADA

#include "TP.h"
#include "Dato.h"

//==============================================================================

typedef tDato tListaOrdenada;

typedef int (*tFcnListaOrdenadaOrdenPrecedenciaDato)(tDato pDatoA, tDato pDatoB);

void listaOrdenadaCrear (tListaOrdenada* pListaOrdenada
                       , tFcnDestructorDato pDestructorDato
                       , tFcnListaOrdenadaOrdenPrecedenciaDato pOrdenPrecedencia);

void listaOrdenadaDestruir (tListaOrdenada pLista);

tDato listaOrdenadaInsertar (tListaOrdenada pLista, tDato pDato);

void listaOrdenadaRemover (tListaOrdenada pLista, tDato pDato);

tBool listaOrdenadaVacia (tListaOrdenada pLista);

//==============================================================================

typedef tDato tListaOrdenadaIterador;

tListaOrdenadaIterador listaOrdenadaIterador (tListaOrdenada pLista);

void listaOrdenadaIteradorLiberar (tListaOrdenadaIterador pIterador);

tBool listaOrdenadaIteradorMoverPrimero (tListaOrdenadaIterador pIterador);

tBool listaOrdenadaIteradorMoverSiguiente (tListaOrdenadaIterador pIterador);

tDato listaOrdenadaIteradorActual(tListaOrdenadaIterador pIterador);

#endif /*TDA_LISTAORDENADA*/
